package com.cloud.freeflow.api.service;

import java.util.List;

import com.cloud.freeflow.api.bean.WfActDef;
import com.cloud.freeflow.api.entity.BizType;
import com.cloud.freeflow.api.entity.ProcDef;
import com.cloud.freeflow.api.entity.ProcPart;

/**
 * 自由流对外接口抽离（方便使用redis缓存）
 * @author taominglong
 *
 */
public interface FreeflowInterfaceService {
	/**
	 * 获取流程定义
	 * @param bizCode
	 * @return
	 */
	List<ProcDef> listProcDefs(Long bizCode);
	
	/**
	 * 获取环节参与者
	 * @param actDefId
	 * @return
	 */
	List<ProcPart> listActParts(Long actDefId);
	
	/**
	 * 获取指定流程参与者
	 * @param id
	 * @return
	 */
	List<ProcPart> listProcParts(long id);
	
	/**
	 * 获取指定业务下的全部流程、环节、参与者
	 * @param bizCode
	 * @return
	 */
	List<ProcDef> loadProcActParts(long bizCode);
	
	/**
	 * 根据参与者和和流程定义编号获取开始节点信息
	 * @param procDefId
	 * @param parts
	 * @return
	 */
	WfActDef loadStartActByProcAndPart(long procDefId, String parts);
	
	/**
	 * 获取下个环节节点相关信息
	 * @param actDefId
	 * @return
	 */
	List<WfActDef> searchNextActDefs(Long actDefId);
	
	/**
	 * 加载节点定义信息
	 * @param actDefId
	 * @return
	 */
	WfActDef loadActDefById(long actDefId);

	/**
	 * 获取流程对应的环节和参与者
	 * @param procDefId
	 * @return
	 */
	List<WfActDef> loadActDefByProc(Long procDefId);

	/**
	 * 获取自定义业务
	 * @return
	 */
	List<BizType> listCustomBizType();

	/**
	 * 创建自定义业务
	 * @param bizType
	 * @return
	 */
	Long createCustomBiz(Integer bizId, String bizName);
}
